# RUN: yaml2obj --docnum=1 %s -o %t1
# RUN: llvm-objdump -p %t1 | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=ELF64

#      ELF64:Dynamic Section:
# ELF64-NEXT:  NEEDED               D
# ELF64-NEXT:  PLTRELSZ             0x0000000000000010
# ELF64-NEXT:  PLTGOT               0x0000000000001000
# ELF64-NEXT:  HASH                 0x0000000000001000
# ELF64-NEXT:  STRTAB               0x0000000000001000
# ELF64-NEXT:  SYMTAB               0x0000000000001000
# ELF64-NEXT:  RELA                 0x0000000000001000
# ELF64-NEXT:  RELASZ               0x0000000000000010
# ELF64-NEXT:  RELAENT              0x0000000000000789
# ELF64-NEXT:  STRSZ                0x0000000000000010
# ELF64-NEXT:  SYMENT               0x0000000000000987
# ELF64-NEXT:  INIT                 0x0000000000001000
# ELF64-NEXT:  FINI                 0x0000000000001000
# ELF64-NEXT:  SONAME               U
# ELF64-NEXT:  RPATH                f
# ELF64-NEXT:  SYMBOLIC             0x1234567890abcdef
# ELF64-NEXT:  REL                  0x0000000000001000
# ELF64-NEXT:  RELSZ                0x0000000000000010
# ELF64-NEXT:  RELENT               0x0000000000000123
# ELF64-NEXT:  PLTREL               0x0000000000000007
# ELF64-NEXT:  DEBUG                0xfedcba0987654321
# ELF64-NEXT:  TEXTREL              0x1122334455667788
# ELF64-NEXT:  JMPREL               0x0000000000001000
# ELF64-NEXT:  BIND_NOW             0x8877665544332211
# ELF64-NEXT:  INIT_ARRAY           0x0000000000001000
# ELF64-NEXT:  FINI_ARRAY           0x0000000000001000
# ELF64-NEXT:  INIT_ARRAYSZ         0x0000000000000010
# ELF64-NEXT:  FINI_ARRAYSZ         0x0000000000000010
# ELF64-NEXT:  RUNPATH              w
# ELF64-NEXT:  FLAGS                0xaabbccddeeff9900
# ELF64-NEXT:  PREINIT_ARRAY        0x0000000000001000
# ELF64-NEXT:  PREINIT_ARRAYSZ      0x0000000000000010
# ELF64-NEXT:  SYMTAB_SHNDX         0x0000000000001000
# ELF64-NEXT:  RELRSZ               0x0000000000000010
# ELF64-NEXT:  RELR                 0x0000000000001000
# ELF64-NEXT:  RELRENT              0x0000000000004321
# ELF64-NEXT:  ANDROID_REL          0x0000000000001000
# ELF64-NEXT:  ANDROID_RELSZ        0x0000000000000010
# ELF64-NEXT:  ANDROID_RELA         0x0000000000001000
# ELF64-NEXT:  ANDROID_RELASZ       0x0000000000000010
# ELF64-NEXT:  ANDROID_RELR         0x0000000000001000
# ELF64-NEXT:  ANDROID_RELRSZ       0x0000000000000010
# ELF64-NEXT:  ANDROID_RELRENT      0x0000000000001234
# ELF64-NEXT:  GNU_HASH             0x0000000000001000
# ELF64-NEXT:  TLSDESC_PLT          0x0000000000001000
# ELF64-NEXT:  TLSDESC_GOT          0x0000000000001000
# ELF64-NEXT:  RELACOUNT            0x0000000000000000
# ELF64-NEXT:  RELCOUNT             0x0000000000000000
# ELF64-NEXT:  FLAGS_1              0x0000000087654321
# ELF64-NEXT:  VERSYM               0x0000000000001000
# ELF64-NEXT:  VERDEF               0x0000000000001000
# ELF64-NEXT:  VERDEFNUM            0x0000000000000000
# ELF64-NEXT:  VERNEED              0x0000000000001000
# ELF64-NEXT:  VERNEEDNUM           0x0000000000000000
# ELF64-NEXT:  AUXILIARY            D
# ELF64-NEXT:  FILTER               U
# ELF64-NEXT:  <unknown:>0x12345678 0x8765432187654321
# ELF64-NEXT:  <unknown:>0x6abcdef0 0x9988776655443322
# ELF64-NEXT:  <unknown:>0x76543210 0x5555666677778888
# ELF64-NOT:{{.}}

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_X86_64
Sections:
  - Name:    .dynstr
    Type:    SHT_STRTAB
    Address: 0x1000
    Size:    0x10
    Content: "004400550066007700"
  - Name:    .dynamic
    Type:    SHT_DYNAMIC
    Address: 0x1010
    Link:    1
    Entries:
     - Tag:   DT_NEEDED
       Value: 0x1
     - Tag:   DT_PLTRELSZ
       Value: 0x10
     - Tag:   DT_PLTGOT
       Value: 0x1000
     - Tag:   DT_HASH
       Value: 0x1000
     - Tag:   DT_STRTAB
       Value: 0x1000
     - Tag:   DT_SYMTAB
       Value: 0x1000
     - Tag:   DT_RELA
       Value: 0x1000
     - Tag:   DT_RELASZ
       Value: 0x10
     - Tag:   DT_RELAENT
       Value: 0x789
     - Tag:   DT_STRSZ
       Value: 0x10
     - Tag:   DT_SYMENT
       Value: 0x987
     - Tag:   DT_INIT
       Value: 0x1000
     - Tag:   DT_FINI
       Value: 0x1000
     - Tag:   DT_SONAME
       Value: 0x3
     - Tag:   DT_RPATH
       Value: 0x5
     - Tag:   DT_SYMBOLIC
       Value: 0x1234567890abcdef
     - Tag:   DT_REL
       Value: 0x1000
     - Tag:   DT_RELSZ
       Value: 0x10
     - Tag:   DT_RELENT
       Value: 0x123
     - Tag:   DT_PLTREL
       Value: 0x7
     - Tag:   DT_DEBUG
       Value: 0xfedcba0987654321
     - Tag:   DT_TEXTREL
       Value: 0x1122334455667788
     - Tag:   DT_JMPREL
       Value: 0x1000
     - Tag:   DT_BIND_NOW
       Value: 0x8877665544332211
     - Tag:   DT_INIT_ARRAY
       Value: 0x1000
     - Tag:   DT_FINI_ARRAY
       Value: 0x1000
     - Tag:   DT_INIT_ARRAYSZ
       Value: 0x10
     - Tag:   DT_FINI_ARRAYSZ
       Value: 0x10
     - Tag:   DT_RUNPATH
       Value: 0x7
     - Tag:   DT_FLAGS
       Value: 0xaabbccddeeff9900
     - Tag:   DT_PREINIT_ARRAY
       Value: 0x1000
     - Tag:   DT_PREINIT_ARRAYSZ
       Value: 0x10
     - Tag:   DT_SYMTAB_SHNDX
       Value: 0x1000
     - Tag:   DT_RELRSZ
       Value: 0x10
     - Tag:   DT_RELR
       Value: 0x1000
     - Tag:   DT_RELRENT
       Value: 0x4321
     - Tag:   DT_ANDROID_REL
       Value: 0x1000
     - Tag:   DT_ANDROID_RELSZ
       Value: 0x10
     - Tag:   DT_ANDROID_RELA
       Value: 0x1000
     - Tag:   DT_ANDROID_RELASZ
       Value: 0x10
     - Tag:   DT_ANDROID_RELR
       Value: 0x1000
     - Tag:   DT_ANDROID_RELRSZ
       Value: 0x10
     - Tag:   DT_ANDROID_RELRENT
       Value: 0x1234
     - Tag:   DT_GNU_HASH
       Value: 0x1000
     - Tag:   DT_TLSDESC_PLT
       Value: 0x1000
     - Tag:   DT_TLSDESC_GOT
       Value: 0x1000
     - Tag:   DT_RELACOUNT
       Value: 0x0
     - Tag:   DT_RELCOUNT
       Value: 0x0
     - Tag:   DT_FLAGS_1
       Value: 0x87654321
     - Tag:   DT_VERSYM
       Value: 0x1000
     - Tag:   DT_VERDEF
       Value: 0x1000
     - Tag:   DT_VERDEFNUM
       Value: 0x0
     - Tag:   DT_VERNEED
       Value: 0x1000
     - Tag:   DT_VERNEEDNUM
       Value: 0x0
     - Tag:   DT_AUXILIARY
       Value: 0x1
     - Tag:   DT_FILTER
       Value: 0x3
## Show behaviour for unknown values in special and unmarked ranges.
## An arbitrary unknown value outside of the special ranges.
     - Tag:   0x12345678
       Value: 0x8765432187654321
## An OS specific tag.
     - Tag:   0x6abcdef0
       Value: 0x9988776655443322
## A processor specific tags.
     - Tag:   0x76543210
       Value: 0x5555666677778888
     - Tag:   DT_NULL
       Value: 0x0
ProgramHeaders:
  - Type:     PT_LOAD
    VAddr:    0x1000
    FirstSec: .dynstr
    LastSec:  .dynamic
  - Type:     PT_DYNAMIC
    VAddr:    0x1010
    FirstSec: .dynamic
    LastSec:  .dynamic

# RUN: yaml2obj --docnum=2 %s -o %t2
# RUN: llvm-objdump -p %t2 | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=ELF32

#      ELF32:Dynamic Section:
# ELF32-NEXT:  NEEDED               D
# ELF32-NEXT:  PLTRELSZ             0x00000010
# ELF32-NEXT:  PLTGOT               0x00001000
# ELF32-NEXT:  HASH                 0x00001000
# ELF32-NEXT:  STRTAB               0x00001000
# ELF32-NEXT:  SYMTAB               0x00001000
# ELF32-NEXT:  RELA                 0x00001000
# ELF32-NEXT:  RELASZ               0x00000010
# ELF32-NEXT:  RELAENT              0x00000789
# ELF32-NEXT:  STRSZ                0x00000010
# ELF32-NEXT:  SYMENT               0x00000987
# ELF32-NEXT:  INIT                 0x00001000
# ELF32-NEXT:  FINI                 0x00001000
# ELF32-NEXT:  SONAME               U
# ELF32-NEXT:  RPATH                f
# ELF32-NEXT:  SYMBOLIC             0x12345678
# ELF32-NEXT:  REL                  0x00001000
# ELF32-NEXT:  RELSZ                0x00000010
# ELF32-NEXT:  RELENT               0x00000123
# ELF32-NEXT:  PLTREL               0x00000007
# ELF32-NEXT:  DEBUG                0xfedcba09
# ELF32-NEXT:  TEXTREL              0x11223344
# ELF32-NEXT:  JMPREL               0x00001000
# ELF32-NEXT:  BIND_NOW             0x88776655
# ELF32-NEXT:  INIT_ARRAY           0x00001000
# ELF32-NEXT:  FINI_ARRAY           0x00001000
# ELF32-NEXT:  INIT_ARRAYSZ         0x00000010
# ELF32-NEXT:  FINI_ARRAYSZ         0x00000010
# ELF32-NEXT:  RUNPATH              w
# ELF32-NEXT:  FLAGS                0xaabbccdd
# ELF32-NEXT:  PREINIT_ARRAY        0x00001000
# ELF32-NEXT:  PREINIT_ARRAYSZ      0x00000010
# ELF32-NEXT:  SYMTAB_SHNDX         0x00001000
# ELF32-NEXT:  RELRSZ               0x00000010
# ELF32-NEXT:  RELR                 0x00001000
# ELF32-NEXT:  RELRENT              0x00004321
# ELF32-NEXT:  ANDROID_REL          0x00001000
# ELF32-NEXT:  ANDROID_RELSZ        0x00000010
# ELF32-NEXT:  ANDROID_RELA         0x00001000
# ELF32-NEXT:  ANDROID_RELASZ       0x00000010
# ELF32-NEXT:  ANDROID_RELR         0x00001000
# ELF32-NEXT:  ANDROID_RELRSZ       0x00000010
# ELF32-NEXT:  ANDROID_RELRENT      0x00001234
# ELF32-NEXT:  GNU_HASH             0x00001000
# ELF32-NEXT:  TLSDESC_PLT          0x00001000
# ELF32-NEXT:  TLSDESC_GOT          0x00001000
# ELF32-NEXT:  RELACOUNT            0x00000000
# ELF32-NEXT:  RELCOUNT             0x00000000
# ELF32-NEXT:  FLAGS_1              0x87654321
# ELF32-NEXT:  VERSYM               0x00001000
# ELF32-NEXT:  VERDEF               0x00001000
# ELF32-NEXT:  VERDEFNUM            0x00000000
# ELF32-NEXT:  VERNEED              0x00001000
# ELF32-NEXT:  VERNEEDNUM           0x00000000
# ELF32-NEXT:  AUXILIARY            D
# ELF32-NEXT:  FILTER               U
# ELF32-NEXT:  <unknown:>0x12345678 0x87654321
# ELF32-NEXT:  <unknown:>0x6abcdef0 0x99887766
# ELF32-NEXT:  <unknown:>0x76543210 0x55556666

--- !ELF
FileHeader:
  Class:   ELFCLASS32
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_386
Sections:
  - Name:    .dynstr
    Type:    SHT_STRTAB
    Address: 0x1000
    Size:    0x10
    Content: "004400550066007700"
  - Name:    .dynamic
    Type:    SHT_DYNAMIC
    Address: 0x1010
    Link:    1
    Entries:
     - Tag:   DT_NEEDED
       Value: 0x1
     - Tag:   DT_PLTRELSZ
       Value: 0x10
     - Tag:   DT_PLTGOT
       Value: 0x1000
     - Tag:   DT_HASH
       Value: 0x1000
     - Tag:   DT_STRTAB
       Value: 0x1000
     - Tag:   DT_SYMTAB
       Value: 0x1000
     - Tag:   DT_RELA
       Value: 0x1000
     - Tag:   DT_RELASZ
       Value: 0x10
     - Tag:   DT_RELAENT
       Value: 0x789
     - Tag:   DT_STRSZ
       Value: 0x10
     - Tag:   DT_SYMENT
       Value: 0x987
     - Tag:   DT_INIT
       Value: 0x1000
     - Tag:   DT_FINI
       Value: 0x1000
     - Tag:   DT_SONAME
       Value: 0x3
     - Tag:   DT_RPATH
       Value: 0x5
     - Tag:   DT_SYMBOLIC
       Value: 0x12345678
     - Tag:   DT_REL
       Value: 0x1000
     - Tag:   DT_RELSZ
       Value: 0x10
     - Tag:   DT_RELENT
       Value: 0x123
     - Tag:   DT_PLTREL
       Value: 0x7
     - Tag:   DT_DEBUG
       Value: 0xfedcba09
     - Tag:   DT_TEXTREL
       Value: 0x11223344
     - Tag:   DT_JMPREL
       Value: 0x1000
     - Tag:   DT_BIND_NOW
       Value: 0x88776655
     - Tag:   DT_INIT_ARRAY
       Value: 0x1000
     - Tag:   DT_FINI_ARRAY
       Value: 0x1000
     - Tag:   DT_INIT_ARRAYSZ
       Value: 0x10
     - Tag:   DT_FINI_ARRAYSZ
       Value: 0x10
     - Tag:   DT_RUNPATH
       Value: 0x7
     - Tag:   DT_FLAGS
       Value: 0xaabbccdd
     - Tag:   DT_PREINIT_ARRAY
       Value: 0x1000
     - Tag:   DT_PREINIT_ARRAYSZ
       Value: 0x10
     - Tag:   DT_SYMTAB_SHNDX
       Value: 0x1000
     - Tag:   DT_RELRSZ
       Value: 0x10
     - Tag:   DT_RELR
       Value: 0x1000
     - Tag:   DT_RELRENT
       Value: 0x4321
     - Tag:   DT_ANDROID_REL
       Value: 0x1000
     - Tag:   DT_ANDROID_RELSZ
       Value: 0x10
     - Tag:   DT_ANDROID_RELA
       Value: 0x1000
     - Tag:   DT_ANDROID_RELASZ
       Value: 0x10
     - Tag:   DT_ANDROID_RELR
       Value: 0x1000
     - Tag:   DT_ANDROID_RELRSZ
       Value: 0x10
     - Tag:   DT_ANDROID_RELRENT
       Value: 0x1234
     - Tag:   DT_GNU_HASH
       Value: 0x1000
     - Tag:   DT_TLSDESC_PLT
       Value: 0x1000
     - Tag:   DT_TLSDESC_GOT
       Value: 0x1000
     - Tag:   DT_RELACOUNT
       Value: 0x0
     - Tag:   DT_RELCOUNT
       Value: 0x0
     - Tag:   DT_FLAGS_1
       Value: 0x87654321
     - Tag:   DT_VERSYM
       Value: 0x1000
     - Tag:   DT_VERDEF
       Value: 0x1000
     - Tag:   DT_VERDEFNUM
       Value: 0x0
     - Tag:   DT_VERNEED
       Value: 0x1000
     - Tag:   DT_VERNEEDNUM
       Value: 0x0
     - Tag:   DT_AUXILIARY
       Value: 0x1
     - Tag:   DT_FILTER
       Value: 0x3
## Show behaviour for unknown values in special and unmarked ranges.
## An arbitrary unknown value outside of the special ranges.
     - Tag:   0x12345678
       Value: 0x87654321
## An OS specific tag.
     - Tag:   0x6abcdef0
       Value: 0x99887766
## A processor specific tags.
     - Tag:   0x76543210
       Value: 0x55556666
     - Tag:   DT_NULL
       Value: 0x0
ProgramHeaders:
  - Type:     PT_LOAD
    VAddr:    0x1000
    FirstSec: .dynstr
    LastSec:  .dynamic
  - Type:     PT_DYNAMIC
    VAddr:    0x1010
    FirstSec: .dynamic
    LastSec:  .dynamic

## When printing the value column we want to have the minimal possible indentation.
## Use an arbitrary dynamic tag to demonstrate that.

# RUN: yaml2obj --docnum=3 %s -o %t3
# RUN: llvm-objdump -p %t3 | FileCheck %s --strict-whitespace --check-prefix=INDENT

# RUN: yaml2obj --docnum=4 %s -o %t4
# RUN: llvm-objdump -p %t4 | FileCheck %s --strict-whitespace --check-prefix=INDENT

# INDENT: {{^}}Dynamic Section:
# INDENT: {{^}}  NEEDED 0x

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_X86_64
Sections:
  - Name: .dynamic
    Type: SHT_DYNAMIC
    Entries:
     - Tag:   DT_NEEDED
       Value: 0x1
     - Tag:   DT_NULL
       Value: 0x0

--- !ELF
FileHeader:
  Class:   ELFCLASS32
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_386
Sections:
  - Name: .dynamic
    Type: SHT_DYNAMIC
    Entries:
     - Tag:   DT_NEEDED
       Value: 0x1
     - Tag:   DT_NULL
       Value: 0x0
